데이터분석기초 10주차¶

1.관련 패키지 설치하기¶

In [ ]:
#워드클라우드를 만들기 위한 패키지 설치 진행 과
import locale
locale.getpreferredencoding = lambda: "UTF-8"
In [ ]:
# 도식화를 위한 패키지 설
!pip install kiwipiepy
!pip install pandas
!pip install seaborn
!pip install matplotlib
!pip install wordcloud
!pip install Pillow --upgrade
!pip install numpy
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Requirement already satisfied: kiwipiepy in /usr/local/lib/python3.10/dist-packages (0.15.1)
Requirement already satisfied: dataclasses in /usr/local/lib/python3.10/dist-packages (from kiwipiepy) (0.6)
Requirement already satisfied: kiwipiepy-model~=0.15 in /usr/local/lib/python3.10/dist-packages (from kiwipiepy) (0.15.0)
Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from kiwipiepy) (1.22.4)
Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from kiwipiepy) (4.65.0)
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (1.5.3)
Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas) (2022.7.1)
Requirement already satisfied: numpy>=1.21.0 in /usr/local/lib/python3.10/dist-packages (from pandas) (1.22.4)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Requirement already satisfied: seaborn in /usr/local/lib/python3.10/dist-packages (0.12.2)
Requirement already satisfied: numpy!=1.24.0,>=1.17 in /usr/local/lib/python3.10/dist-packages (from seaborn) (1.22.4)
Requirement already satisfied: pandas>=0.25 in /usr/local/lib/python3.10/dist-packages (from seaborn) (1.5.3)
Requirement already satisfied: matplotlib!=3.6.1,>=3.1 in /usr/local/lib/python3.10/dist-packages (from seaborn) (3.7.1)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (1.0.7)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (4.39.3)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (1.4.4)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (23.1)
Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (9.5.0)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (3.0.9)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.1->seaborn) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=0.25->seaborn) (2022.7.1)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib!=3.6.1,>=3.1->seaborn) (1.16.0)
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (3.7.1)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (1.0.7)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (4.39.3)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (1.4.4)
Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (1.22.4)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (23.1)
Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (9.5.0)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (3.0.9)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (2.8.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Requirement already satisfied: wordcloud in /usr/local/lib/python3.10/dist-packages (1.8.2.2)
Requirement already satisfied: numpy>=1.6.1 in /usr/local/lib/python3.10/dist-packages (from wordcloud) (1.22.4)
Requirement already satisfied: pillow in /usr/local/lib/python3.10/dist-packages (from wordcloud) (9.5.0)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (from wordcloud) (3.7.1)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->wordcloud) (1.0.7)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib->wordcloud) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->wordcloud) (4.39.3)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->wordcloud) (1.4.4)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->wordcloud) (23.1)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->wordcloud) (3.0.9)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib->wordcloud) (2.8.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib->wordcloud) (1.16.0)
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Requirement already satisfied: Pillow in /usr/local/lib/python3.10/dist-packages (9.5.0)
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (1.22.4)
Reading package lists... Done
Building dependency tree       
Reading state information... Done
fonts-nanum is already the newest version (20180306-3).
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.
/usr/share/fonts: caching, new cache contents: 0 fonts, 1 dirs
/usr/share/fonts/truetype: caching, new cache contents: 0 fonts, 3 dirs
/usr/share/fonts/truetype/humor-sans: caching, new cache contents: 1 fonts, 0 dirs
/usr/share/fonts/truetype/liberation: caching, new cache contents: 16 fonts, 0 dirs
/usr/share/fonts/truetype/nanum: caching, new cache contents: 10 fonts, 0 dirs
/usr/local/share/fonts: caching, new cache contents: 0 fonts, 0 dirs
/root/.local/share/fonts: skipping, no such directory
/root/.fonts: skipping, no such directory
/usr/share/fonts/truetype: skipping, looped directory detected
/usr/share/fonts/truetype/humor-sans: skipping, looped directory detected
/usr/share/fonts/truetype/liberation: skipping, looped directory detected
/usr/share/fonts/truetype/nanum: skipping, looped directory detected
/var/cache/fontconfig: cleaning cache directory
/root/.cache/fontconfig: not cleaning non-existent cache directory
/root/.fontconfig: not cleaning non-existent cache directory
fc-cache: succeeded

런타임 다시 시작¶

2.데이터 불러오고 정제하기¶

In [ ]:
#드라이브 마운
from google.colab import drive
drive.mount('/content/drive')
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
In [ ]:
#폴더안에 폴더  안에 파일 설정(심플) 
thieves = open('drive/My Drive/class/5월 11일 테스트용 리뷰.txt', encoding='UTF-8').read()
print(thieves[:1000])
 재밌 어요
 드라마 로 도 나오 면 좋 겠 어요
 가해자 에게 서사 를 만들 어 주 는 진짜 마음 이 불편 하 어 지 ᆫ 이야기 술술 읽히 어요 옥수수 수염 차 마시 고 싶 다 마음 이 따뜻 하 어 지 는 내용 들 인생 을 배우 었 어요 갈등 은 깊 고 해결 은 간단 하 어서 무슨 어린이 용 동화책 보 는 기분 불 호 따뜻 하 ᆫ 소설 재밌 게 보 었 어요
 연극 으로 나오 면 보 러 가 ᆯ래 요
 편 은 재밌 었 어요
 편 이 아쉽 을 뿐 소소하 니 잔잔 하 ᆫ 감동 을 주 는 친근 하 ᆫ 소설 이 ᆸ니다 지루하 ᆷ 없이 사람 살 는 얘기 공감 하 는 기회 가 되 ᆫ 듯 비 현실 적 이 ᆫ 다정 하 ᆷ 에 마음 이 따뜻 하 어 지 ᆸ니다
 친숙 하 ᆫ 공간 들 에서 인간관계 를 통하 어 서로 가 마음 을 나누 게 되 는 과정 이 따뜻하 네요 술술 읽히 네요 가볍 은 듯 무 거 울 ᆫ 이야기 같 어요 해석 하 기 에 따르 어 다르 ᆯ 것 같 네요
 재밌 어요
 가해자 의 마음 을 이해 하 어 주 고 가해자 를 다독이 어 주 고 가해자 에게 기회 를 주 는 불편 하 ᆫ 책 사랑 의 힘 은 부재 도 극복 되 는 힘 이 있 어 그 사랑 의 바통 을 타인 이 받 어서 채우 어 주 죠
 감 가볍 게 읽 으려 선택 하 었 지만 가볍 지 않 은 마무리 의 책 각자 의 사정 이 다 있 다
 진짜 인상 깊 은 책 마음 이 따뜻 하 어 지 었 어요
 나 도 독고 씨 필요 하 어 요 한 번 에 주욱 읽 게 되 네요
 불편 하 ᆫ 편의점 이 지만 꼭 한 번 가 어 보 고 싶 다는 묘 하 ᆫ 끌리 ᆷ 이 있 네요
 읽 는 내내 따뜻 하 어 지 는 스토리 이 ᆸ니다
 출퇴근 길 에 재미나 게 금방 읽 었 습니다
 초반 반전 은 너무 비 현실 적 유튜브 로 처음 부분 을 접하 고 궁금 하 ᆷ 에 오랜만 에 책 을 읽 었 네요
 술술 잘 읽히 는 착하 ᆫ 책 사람 들 은 각자 만 의 사정 이 있 다 예전 부터 베스트셀러 이 ᆫ 거 보 고 읽 어 보 었 는데 역시 베셀 은 베 셀 이 ᆫ 
In [ ]:
# ' ' 안에 있는 문자가 아니면 지워버리고 스페이스가 연속인경우도 지우기=>데이터 정제하기
import re
thieves = re.sub('[^가-힣]', ' ', thieves)
thieves = re.sub('[\s]+', ' ', thieves)
thieves = thieves.strip()
print(thieves[:1000])
재밌 어요 드라마 로 도 나오 면 좋 겠 어요 가해자 에게 서사 를 만들 어 주 는 진짜 마음 이 불편 하 어 지 이야기 술술 읽히 어요 옥수수 수염 차 마시 고 싶 다 마음 이 따뜻 하 어 지 는 내용 들 인생 을 배우 었 어요 갈등 은 깊 고 해결 은 간단 하 어서 무슨 어린이 용 동화책 보 는 기분 불 호 따뜻 하 소설 재밌 게 보 었 어요 연극 으로 나오 면 보 러 가 래 요 편 은 재밌 었 어요 편 이 아쉽 을 뿐 소소하 니 잔잔 하 감동 을 주 는 친근 하 소설 이 니다 지루하 없이 사람 살 는 얘기 공감 하 는 기회 가 되 듯 비 현실 적 이 다정 하 에 마음 이 따뜻 하 어 지 니다 친숙 하 공간 들 에서 인간관계 를 통하 어 서로 가 마음 을 나누 게 되 는 과정 이 따뜻하 네요 술술 읽히 네요 가볍 은 듯 무 거 울 이야기 같 어요 해석 하 기 에 따르 어 다르 것 같 네요 재밌 어요 가해자 의 마음 을 이해 하 어 주 고 가해자 를 다독이 어 주 고 가해자 에게 기회 를 주 는 불편 하 책 사랑 의 힘 은 부재 도 극복 되 는 힘 이 있 어 그 사랑 의 바통 을 타인 이 받 어서 채우 어 주 죠 감 가볍 게 읽 으려 선택 하 었 지만 가볍 지 않 은 마무리 의 책 각자 의 사정 이 다 있 다 진짜 인상 깊 은 책 마음 이 따뜻 하 어 지 었 어요 나 도 독고 씨 필요 하 어 요 한 번 에 주욱 읽 게 되 네요 불편 하 편의점 이 지만 꼭 한 번 가 어 보 고 싶 다는 묘 하 끌리 이 있 네요 읽 는 내내 따뜻 하 어 지 는 스토리 이 니다 출퇴근 길 에 재미나 게 금방 읽 었 습니다 초반 반전 은 너무 비 현실 적 유튜브 로 처음 부분 을 접하 고 궁금 하 에 오랜만 에 책 을 읽 었 네요 술술 잘 읽히 는 착하 책 사람 들 은 각자 만 의 사정 이 있 다 예전 부터 베스트셀러 이 거 보 고 읽 어 보 었 는데 역시 베셀 은 베 셀 이 이유 가 잇 는 법 흥미진진하 고 재미있 게 보 었 습니다 진정 하 주인공 은 선량 하 편의점 사장 님 이

3.형태소 분석하기¶

In [ ]:
#키위라는 클래스 단어와 형태소 분석 결과를 볼수있음 
from kiwipiepy import Kiwi

kiwi = Kiwi()
posTagout = kiwi.tokenize(thieves)
sentencePOS = []
for eachOut in posTagout:
    result = eachOut[0]+"/"+eachOut[1]
    sentencePOS.append(result)
print(sentencePOS[:10])
['재밌/VA', '어요/EF', '드라마/NNG', '로/JKB', '도/JX', '나오/VV', '면/EC', '좋/VA', '겠/EP', '어요/EF']
In [ ]:
#판다스를 이용해 리스
import pandas as pd
df_words = pd.DataFrame({'word':sentencePOS})
print(df_words[:10])
      word
0    재밌/VA
1    어요/EF
2  드라마/NNG
3    로/JKB
4     도/JX
5    나오/VV
6     면/EC
7     좋/VA
8     겠/EP
9    어요/EF

4.단어 빈도표 만들기¶

In [ ]:
#단어의 길이를 계산
df_words['count'] = df_words['word'].str.len()
print(df_words[:10])
      word  count
0    재밌/VA      5
1    어요/EF      5
2  드라마/NNG      7
3    로/JKB      5
4     도/JX      4
5    나오/VV      5
6     면/EC      4
7     좋/VA      4
8     겠/EP      4
9    어요/EF      5
In [ ]:
# 5이상만 계산
df_words = df_words.query('count >= 5')
print(df_words.sort_values('count')[:10])
       word  count
0     재밌/VA      5
9392  하/XSA      5
9390  는/ETM      5
9387  하/XSA      5
9385  하/NNG      5
9384  대/XPN      5
9383  에/JKB      5
9382  하/NNG      5
9381  편/NNG      5
9380  는/ETM      5
In [ ]:
#해당 단어들의 빈도수를 카운
df_words = df_words.groupby('word', as_index = False)
#
df_words = df_words.agg(n=('word', 'count'))
#내림차순으
df_words = df_words.sort_values('n', ascending = False)
print(df_words[:10])
       word    n
295   는/ETM  511
1140  이/JKS  353
1531  하/XSA  345
1124  을/JKO  285
1419  책/NNG  282
1133  의/JKG  263
1143  이/VCP  242
989   에/JKB  212
1120  은/ETM  192
1532  하/XSV  157

5.상위 30개의 단어 추출해서 막대 그래프로 표현하기¶

In [ ]:
#상위권 30 단어 추출
top30 = df_words.head(30)
print(top30)
         word    n
295     는/ETM  511
1140    이/JKS  353
1531    하/XSA  345
1124    을/JKO  285
1419    책/NNG  282
1133    의/JKG  263
1143    이/VCP  242
989     에/JKB  212
1120    은/ETM  192
1532    하/XSV  157
723    사람/NNG  147
313     다/MAG  147
1164  이야기/NNG  145
455     따뜻/XR  144
969     어요/EF  142
441     들/XSN  133
7       가/JKS  125
503     를/JKO  125
511    마음/NNG  119
270     네요/EF  110
1529    하/NNG  104
1262    재밌/VA   97
1502  편의점/NNG   95
81      것/NNB   94
698    불편/NNG   91
834     수/NNB   91
187     기/ETN   83
1207    읽히/VV   81
1239    잘/MAG   76
870    습니다/EF   72
In [ ]:
#표 시각화 폰트 설정 그림의 크기 해상도 설정 런타임 다
import seaborn as sns
import matplotlib.pyplot as plt

plt.rcParams.update({'font.family':'NanumBarunGothic'})
plt.rcParams.update({'figure.dpi':'120'})
plt.rcParams.update({'figure.figsize':[6.5,6]})

sns.barplot(data = top30, y = 'word', x = 'n')
Out[ ]:
<Axes: xlabel='n', ylabel='word'>

6.워드클라우드 생성하기¶

In [ ]:
#딕셔너리의 형태로 변환 for 문을 사용해 단어개수 설정
df_words_dic = df_words.set_index('word').to_dict()['n']

dictNum = 0
for key, value in df_words_dic.items():
    print(key, ":", value)
    dictNum += 1
    if dictNum == 30:
      break
는/ETM : 511
이/JKS : 353
하/XSA : 345
을/JKO : 285
책/NNG : 282
의/JKG : 263
이/VCP : 242
에/JKB : 212
은/ETM : 192
하/XSV : 157
사람/NNG : 147
다/MAG : 147
이야기/NNG : 145
따뜻/XR : 144
어요/EF : 142
들/XSN : 133
가/JKS : 125
를/JKO : 125
마음/NNG : 119
네요/EF : 110
하/NNG : 104
재밌/VA : 97
편의점/NNG : 95
것/NNB : 94
불편/NNG : 91
수/NNB : 91
기/ETN : 83
읽히/VV : 81
잘/MAG : 76
습니다/EF : 72
In [ ]:
from wordcloud import WordCloud
from PIL import Image 
import numpy as np
import matplotlib.pyplot as plt
#폰트 설정 가능 
font = 'drive/My Drive/class/DoHyeon-Regular.ttf'
word_cloud = WordCloud(font_path = font,
                       width = 2000, height = 1000,
                       background_color='white')

word_cloud.generate_from_frequencies(df_words_dic)

plt.figure(figsize=(30,30))
plt.imshow(word_cloud)
plt.axis("off")
plt.tight_layout(pad=0)
plt.show()

7.명사 & 형용사 & 동사 (content words)만 사용하기¶

In [ ]:
from kiwipiepy import Kiwi
#if문 조건 설정 단어의 품사를 설정해 해당 품사만 
kiwi = Kiwi()
posTagout = kiwi.tokenize(thieves)
sentencePOS = []
for eachOut in posTagout:
    if "VV" in eachOut[1] or "VA" in eachOut[1] or "NN" in eachOut[1]:
      result = eachOut[0]+"/"+eachOut[1]
      sentencePOS.append(result)
print(sentencePOS[:10])
['재밌/VA', '드라마/NNG', '나오/VV', '좋/VA', '가해자/NNG', '서사/NNG', '만들/VV', '마음/NNG', '불편/NNG', '이야기/NNG']
In [ ]:
#같음
import pandas as pd
df_words = pd.DataFrame({'word':sentencePOS})
print(df_words[:10])
      word
0    재밌/VA
1  드라마/NNG
2    나오/VV
3     좋/VA
4  가해자/NNG
5   서사/NNG
6    만들/VV
7   마음/NNG
8   불편/NNG
9  이야기/NNG
In [ ]:
# 같
df_words['count'] = df_words['word'].str.len()

#
df_words = df_words.query('count >= 2')

#
df_words = df_words.groupby('word', as_index = False)
#
df_words = df_words.agg(n=('word', 'count'))
#
df_words = df_words.sort_values('n', ascending = False)
print(df_words[:10])
         word    n
913      읽/VV  291
1088    책/NNG  282
549    사람/NNG  147
875   이야기/NNG  145
1194     하/VV  137
371    마음/NNG  119
921      있/VA  118
315      되/VV  112
1191    하/NNG  104
961     재밌/VA   97
In [ ]:
#해당 결과를 통해 유추해볼수있
top30 = df_words.head(30)
print(top30)

import seaborn as sns
import matplotlib.pyplot as plt

plt.rcParams.update({'font.family':'NanumBarunGothic'})

plt.rcParams.update({'figure.dpi':'120'})
plt.rcParams.update({'figure.figsize':[6.5,6]})

sns.barplot(data = top30, y = 'word', x = 'n')
         word    n
913      읽/VV  291
1088    책/NNG  282
549    사람/NNG  147
875   이야기/NNG  145
1194     하/VV  137
371    마음/NNG  119
921      있/VA  118
315      되/VV  112
1191    하/NNG  104
961     재밌/VA   97
1166  편의점/NNG   95
59      것/NNB   94
526    불편/NNG   91
644     수/NNB   91
1002     좋/VA   83
915     읽히/VV   81
500      보/VV   77
569     삶/NNG   70
37       같/VA   67
622    소설/NNG   56
922      있/VV   51
25     감동/NNG   51
1        가/VV   50
102    관계/NNG   50
585    생각/NNG   48
288    독고/NNP   47
44      거/NNB   40
5     가볍/VA-I   39
564      살/VV   39
633    소통/NNG   37
Out[ ]:
<Axes: xlabel='n', ylabel='word'>
In [ ]:
#
df_words_dic = df_words.set_index('word').to_dict()['n']

dictNum = 0
for key, value in df_words_dic.items():
    print(key, ":", value)
    dictNum += 1
    if dictNum == 15:
      break
읽/VV : 291
책/NNG : 282
사람/NNG : 147
이야기/NNG : 145
하/VV : 137
마음/NNG : 119
있/VA : 118
되/VV : 112
하/NNG : 104
재밌/VA : 97
편의점/NNG : 95
것/NNB : 94
불편/NNG : 91
수/NNB : 91
좋/VA : 83
In [ ]:
from wordcloud import WordCloud
from PIL import Image 
import numpy as np
import matplotlib.pyplot as plt

font = 'drive/My Drive/class/DoHyeon-Regular.ttf'
word_cloud = WordCloud(font_path = font,
                       width = 2000, height = 1000,
                       background_color='white')

word_cloud.generate_from_frequencies(df_words_dic)

plt.figure(figsize=(15,15))
plt.imshow(word_cloud)
plt.axis("off")
plt.tight_layout(pad=0)
plt.show()

8.워드 클라우드 모양 변경하기¶

In [ ]:
#다른 모양도 가능
import PIL
icon = PIL.Image.open('drive/My Drive/class/cloud.png')
In [ ]:
#rgb로 색깔을 설정가능
import numpy as np
img = PIL.Image.new('RGB', icon.size, (255, 255, 255))
img.paste(icon, icon)
img = np.array(img)
In [ ]:
#윤관 따오기 방법은 동
word_cloud = WordCloud(random_state = 1234,
                       font_path = font,
                       width = 1000, height = 700,
                       background_color='white',
                       mask = img)

img_word_cloud = word_cloud.generate_from_frequencies(df_words_dic)

plt.figure(figsize=(15,15))
plt.imshow(img_word_cloud)
plt.axis("off")
plt.tight_layout(pad=0)
plt.show()

9.용어 색인 테이블(concordance table) 사용하여 문맥 확인하기¶

In [ ]:
# 해당 텍스트의 문맥을 볼수있
# 말뭉치 가져오기
from kiwipiepy import Kiwi

kiwi = Kiwi()

sentences = kiwi.split_into_sents(thieves)
output = open("drive/My Drive/class/5월 11일 테스트용 리뷰.txt", 'w', encoding='utf-8')

sentencesText = ""
for sentence in sentences:

  #
  eachPOSSentence = ""
  posTagout = kiwi.tokenize(sentence.text)
  for eachOut in posTagout:
    eachPOSSentence = eachPOSSentence + " " + eachOut[0]

  output.write(eachPOSSentence + "\n")

  sentencesText = sentencesText + "\n" + eachPOSSentence
print(sentencesText[:100])
output.close()
 재밌 어요
 드라마 로 도 나오 면 좋 겠 어요
 가해자 에게 서사 를 만들 어 주 는 진짜 마음 이 불편 하 어 지 이야기 술술 읽히 어요 옥수수 수염 차 마시 고 싶 다 마
In [ ]:
# nltk 클래스안에 기능 사옹하기위해 설치
!pip install nltk
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Requirement already satisfied: nltk in /usr/local/lib/python3.10/dist-packages (3.8.1)
Requirement already satisfied: click in /usr/local/lib/python3.10/dist-packages (from nltk) (8.1.3)
Requirement already satisfied: joblib in /usr/local/lib/python3.10/dist-packages (from nltk) (1.2.0)
Requirement already satisfied: regex>=2021.8.3 in /usr/local/lib/python3.10/dist-packages (from nltk) (2022.10.31)
Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from nltk) (4.65.0)
In [ ]:
# * = 모든 함수를 다 사용하겠다 
from nltk import *
retokenize = RegexpTokenizer("[\w]+")
text = Text(retokenize.tokenize(sentencesText))
text.concordance("드라마")
Displaying 19 of 19 matches:
재밌 어요 드라마 로 도 나오 면 좋 겠 어요 가해자 에게 서사 를 만들 어 주 는 
속 각자 해결 하 어 나아가 는 방식 의 차이 가 재밌 었 던 작품 드라마 로 나오 면 정 주행 하 겟 습니다 가만히 들여다보 는 조용 하 고
재밌 네요 근데 페이지 수 가 거의 저 의 인내 를 드뎌 완독요 곧 드라마 로 만들 어 지 것 같 어요 사람 들 은 따뜻 하 이야기 를 좋아하
면 어떻 을까 지루 하 거나 쳐지 없이 술술 읽히 어요 재밌 습니다 드라마 로 나오 었 으면 좋 겠 네요 탄도 기대 중 결국 삶 은 관계 이 
 니 다 불편 하 편의점 이 편안 하 편의점 으로 바뀌 는 순간 들 드라마 로 나오 어도 정말 재미있 을 듯 하 니 이 다 근데 세상 이 원래
 많 고 술술 잘 읽히 었 어요 너무 편안 하 게 읽 을 수 있 는 드라마 한 편 을 보 는 듯 하 힐링 하 면서 읽 은 책 만 병 통치 옥수
 읽 을 수 있 으며 일상 적 이 스토리 가 너무 좋 었 어요 반전 드라마 를 보 는 기분 연결 성 이 엄청 나 어서 몰입 이 되 는 내용 이
 그럼 그냥 평범 살 어 내 는 법 살아가 는 법 삶 을 살 는 법 드라마 로 만나 고 싶 어요 재미있 고 다음 의 이야기 가 어떻 게 되 지
이 인상 적 이 었 어요 오디오북 으로 처음 오 어 독하 책 라디오 드라마 보 는 느낌 이 었 어요 불편 하 편의점 이 지만 독자 이 저 도 
 삶 은 관계 이 고 관계 는 소통 이 다 깨달음 을 얻 었 습니다 드라마 로 나오 어도 잘 보 거 같 어요 독고 와 함께 치유 잠 이 오 지
스토리 를 통하 어 사람 냄새 나 는 감동 을 주 어 좋 어요 완전 드라마 보 는 듯 하 소설 이 네 요 설레이 는 마음 으로 후다닥 읽 었 
 기 하 지만 재밌 습니다 삶 은 관계 이 며 관계 는 소통 이 다 드라마 나 의 아저씨 가 생각나 어 어른 이 또 다른 어른 을 지키 어 주
다른 이 에게 돌려주 는 마음 마음 이 따뜻 하 어 지 는 책 왠지 드라마 로 만들 어 지 것 같 은 느낌 결국 그 도 자신 을 찾 어 헤매 
않 은 편의점 이야기 다양 하 인생 쉽 게 읽히 었 어요 한 편 의 드라마 를 보 것 같 네요 삶 은 살아가 는 것 이 다 그리고 강 은 건너
는 소통 이 다 이 이 라는 글귀 가 공감 이 되 었 어여 영화 나 드라마 처럼 빠지 어서 한 권 다 쭉 읽 었 네요 해리포터 이후 로 처음 
고 베 푸 줄 알 는 사람 이 되 어야 겠 다는 생각 이 들 었 다 드라마 보 듯이 술술 완 독 이 이 요 술술 편안 하 게 읽 다 보 면 나
하 는 것 이 삶 삶 은 어떻 게 든 의미 를 가지 며 계속 되 다 드라마 한 편 보 느낌 잔잔 하 면서 깊 은 감동 이 었 어요 가볍 게 시
다 끝 까지 읽 게 만들 는 책 이 니 이 다 클리셰 가득 하 옛날 드라마 한 편 보 느낌 이 네요 여운 이 남 는 책 누구 보다 책 을 많이
 잘 살 어 있 는 따뜻 하 이야기 쉽 게 읽 을 수 있 는 따듯하 드라마 순식간 에 읽 어 버리 었 습니다 잘 읽 어 지 는 내용 이 지만 
In [ ]:
text.concordance("따뜻")
Displaying 25 of 144 matches:
지 이야기 술술 읽히 어요 옥수수 수염 차 마시 고 싶 다 마음 이 따뜻 하 어 지 는 내용 들 인생 을 배우 었 어요 갈등 은 깊 고 해결
 해결 은 간단 하 어서 무슨 어린이 용 동화책 보 는 기분 불 호 따뜻 하 소설 재밌 게 보 었 어요 연극 으로 나오 면 보 러 가 래 요
 공감 하 는 기회 가 되 듯 비 현실 적 이 다정 하 에 마음 이 따뜻 하 어 지 니 다 친숙 하 공간 들 에서 인간관계 를 통하 어 서로
 의 책 각자 의 사정 이 다 있 다 진짜 인상 깊 은 책 마음 이 따뜻 하 어 지 었 어요 나 도 독고 씨 필요 하 어 요 한 번 에 주욱
한 번 가 어 보 고 싶 다는 묘 하 끌리 이 있 네요 읽 는 내내 따뜻 하 어 지 는 스토리 이 니 다 출퇴근 길 에 재미나 게 금방 읽 
 읽 을수록 마음 이 편하 어 지 는 편의점 이야기 마음 이 너무나 따뜻 하 어 지 는 얘기 이 니 다 완벽 하 었 다 묘하 게 공감 되 는
를 드뎌 완독요 곧 드라마 로 만들 어 지 것 같 어요 사람 들 은 따뜻 하 이야기 를 좋아하 니까 마지막 은 좀 아쉽 었 지만 재밌 게 술
지막 은 다소 작위 적 이 라 개연 성 이 떨어지 어서 아쉽 어 요 따뜻 하 소설 이 이 니 다 세상 은 혼자 살아가 는 것 이 아니 다 함
 었 는데 감동 에 눈물 이 자꾸 나 이 니 다 재밌 어요 마음 이 따뜻 하 어 지 고 나 자신 을 돌아보 게 되 네요 많 은 사람 들 이 
 에 장르 가 바뀌 는 느낌 이 라 당황 하 었 어요 술술 읽히 는 따뜻 하 이야기 망가지 고 고통 스럽 은 사람 들 끼리 서로 를 위 로 
로 를 고치 는 것 이 정말 감동 적 이 이 었 다 중독 성 있 는 따뜻 하 이야기 한번 시작 하 면 멈추 수 없 네요 재밌 게 읽 었 어요
 었 다 현실 과 는 동떨어지 꿈 이나 동화 같 은 이야기 마음 이 따뜻 하 어 지 는 술술 읽히 고 정 이 가 는 책 요즘 같 은 냉정 하
이야기 로 편하 게 보 다가 엔딩 에서 불편 하 어 지 책 마음 이 따뜻 하 어 지 는 개개인 의 사연 들 캐릭터 들 의 사연 이 엮이 는 
 들 을 잃 지 말 ᆯ 시 기 재밌 어요 이 세상 모든 독고 들 을 따뜻 하 마음 으로 응원 하 니 다 십 년 만 에 책 이 란 거 루 읽 
 을 깨우치 게 하 다 술술 읽히 는 책 재미 있 게 읽 었 습니다 따뜻 하 책 같 은 이유 로 싫 어 지 었 다가 좋 어 지 기 도 하 는
장인물 의 갈등 으로 인하 어 답답 하 지만 결론 적 으로 마음 이 따뜻 하 어 지 는 책 너무나 도 시간 가 는 줄 모르 고 읽 은 책 소
 게 되 었 습니다 관계 에서 오 는 갈등 과 인생 의 문제 들 이 따뜻 하 말 과 작 은 도움 으로 해결 따땃 하 책 독고 씨 가 그런 사
배경 으로 하 어서 그렇 지 더 몰입 하 어서 재밌 게 읽 었 어요 따뜻 하 고 마음 을 녹이 어 주 는 책 편의점 알바 하 었 을 때 가 
 표현 들 이 인상 적 너무 흥미 롭 어서 금새 읽 었 다 마음 이 따뜻 하 어 지 었 어요 불편 하 편의점 속 의 인물 들 의 이야기 와 
님 의 이야기 는 정말 많 은 생각 을 하 게 되 었 어요 마음 이 따뜻 하 고 뭉클 하 이야기 독고 씨 옥수수 수염 차 불편 하 편의점 하
람 은 없 다 후속 편 이 궁금 하 니 다 바삐 살아가 던 나 에게 따뜻 하 ᆷ 으르 느끼 하 게 하 어 주 책 쉽 게 읽히 는 책 앉 은 
 고 마음 에 오 어 닿 는다 편 이 기대 되 다 독고 의 뒷이야기 따뜻 하 우리 이웃 들 의 이야기 이 라서 좋 어요 세상 은 아직 사 만
 어요 세상 은 아직 사 만 하 고 ᆺ 감동 적 이 소설 이 니 다 따뜻 하 이야기 출근길 일 만 에 다 읽 었 네요 재미있 어요 일만 에 
 하 어 주 책 불편 하 다는 것 이 때로 는 사람 을 의 마음 을 따뜻 하 게 하 수 도 있 지 않 나 생각 하 게 하 네요 삶 에 위로 
이 어디 에서 나 보 수 있 는 서민 들 의 이야기 이 라 조금 더 따뜻 하 게 오 어 닿 었 다 가볍 게 읽 을 수 도 있 고 진지 하 게
In [ ]:
text.concordance("재밌")
Displaying 25 of 97 matches:
 재밌 어요 드라마 로 도 나오 면 좋 겠 어요 가해자 에게 서사 를 만들
 하 어서 무슨 어린이 용 동화책 보 는 기분 불 호 따뜻 하 소설 재밌 게 보 었 어요 연극 으로 나오 면 보 러 가 래 요 편 은 재밌 
 재밌 게 보 었 어요 연극 으로 나오 면 보 러 가 래 요 편 은 재밌 었 어요 편 이 아쉽 을 뿐 소소하 니 잔잔 하 감동 을 주 는 친
 울 ᆯ 이야기 같 어요 해석 하 기 에 따르 어 다르 것 같 네요 재밌 어요 가해자 의 마음 을 이해 하 어 주 고 가해자 를 다독이 어 
 라는 캐릭터 의 매력 에 스며들 면서 몰입 하 어서 읽 게 되 는 재밌 는 책 독고 는 고독 하 지 않 었 다 반전 있 는 서사 와 따수운
듣 다가 감질 나 어서 전자책 으로 후다닥 읽 어 ᆻ 내 어요 너무 재밌 습니다 넘 재밌 어서 완전 빠져들 어서 다 읽 었 네요 읽 을수록 
 어서 전자책 으로 후다닥 읽 어 ᆻ 내 어요 너무 재밌 습니다 넘 재밌 어서 완전 빠져들 어서 다 읽 었 네요 읽 을수록 마음 이 편하 어
 는 에피소드 들 속 각자 해결 하 어 나아가 는 방식 의 차이 가 재밌 었 던 작품 드라마 로 나오 면 정 주행 하 겟 습니다 가만히 들여
 고 캐릭터 성격 은 비 현실 적 이 가 어 어 쓰 것 같 지만 도 재밌 게 읽 은 소설 따뜻하 고 뭉클 하 소설 빠르 게 술술 읽히 는 문
 옥수수 수염 차 묘사 의 힘 을 극찬 하 어서 읽 게 되 었 는데 재밌 네요 근데 페이지 수 가 거의 저 의 인내 를 드뎌 완독요 곧 드라
들 은 따뜻 하 이야기 를 좋아하 니까 마지막 은 좀 아쉽 었 지만 재밌 게 술술 읽 었 어요 간만에 완 독 하 작품 술술 읽히 다 라디오 
내밀 어 보 면 어떻 을까 지루 하 거나 쳐지 없이 술술 읽히 어요 재밌 습니다 드라마 로 나오 었 으면 좋 겠 네요 탄도 기대 중 결국 삶
이야기 절반 정도 읽 었 는데 감동 에 눈물 이 자꾸 나 이 니 다 재밌 어요 마음 이 따뜻 하 어 지 고 나 자신 을 돌아보 게 되 네요 
은 오디오 로 듣 고 있 다 우연 이 모이 어 인연 이 되 는 순간 재밌 어요 오랜만 에 책 읽 는 데 잘 읽히 네요 사람 냄새 나 는 이야
중독 성 있 는 따뜻 하 이야기 한번 시작 하 면 멈추 수 없 네요 재밌 게 읽 었 어요 독고 가 사람 들 에게 위로 를 주 줄 알 었 는데
하 마음 을 나누 어 주 는 불편 하 이야기 편하 게 술술 읽히 는 재밌 는 책 단순 하 편의점 안 에서 사람 들 이 살아가 는 재미 를 읽
 하 감동 을 주 는 모두 소중하 사람 들 을 잃 지 말 ᆯ 시 기 재밌 어요 이 세상 모든 독고 들 을 따뜻 하 마음 으로 응원 하 니 다
재 미 이 있 어 요 웃 다그 어 울 다가 마지막 에 오열콤보 너무 재밌 어요 평소 책 을 읽 지 않 어 베스트 중 에 고르 어서 읽 었 는
 씨 가 그런 사람 이 었 다니 불편 하 네요 불편 하 편의점 정말 재밌 게 잘 읽 었 습니다 마음 의 감동 을 주 는 책 꼭 읽 어 보 세
가 는 실제 동네 를 배경 으로 하 어서 그렇 지 더 몰입 하 어서 재밌 게 읽 었 어요 따뜻 하 고 마음 을 녹이 어 주 는 책 편의점 알
 하 편의점 속 의 인물 들 의 이야기 와 힐링 이 담기 어 있 다 재밌 는 스토리텔링 이 인상 적 이 다 삶 은 관계 속 의 소통 행복 은
술 읽히 이제 읽 기 시작 하 독서 초보 이 데 주일 걸리 었 네요 재밌 어서 짬 나 때 마다 계속 보 게 되 요 불편 하 다고 하 었 지만
가 멀 ᆯ 사람 이 데 다 읽 는 데 오래 걸리 지 않 을 정도 로 재밌 게 읽 었 어요 한 사람 한 사람 에게 이 입 하 면서 보 었 네요
 하 면 술술 읽히 어요 너무 재미있 어요 편의점 이 라는 공간 도 재밌 네요 원플러스원 은 계속 되 어야 하 다 술술 읽히 는 힐링 되 는
 이 고 관계 는 소통 이 다 재밋네 용 일 만 에 다 읽 었 어요 재밌 어서 시간 가 는 줄 모르 고 보 었 어요 여러 사건 이 이어지 어
In [ ]:
text.concordance("감동")
Displaying 25 of 51 matches:
래 요 편 은 재밌 었 어요 편 이 아쉽 을 뿐 소소하 니 잔잔 하 감동 을 주 는 친근 하 소설 이 이 니 다 지루하 없이 사람 살 는 얘
 어요 듣 으며 인생 상담 하 듯 잔잔 하 다 빵 터지 는 반전 과 감동 끝 까지 따뜻하 다 이야기 가 진행 되 수록 독고 이 라는 캐릭터 
 살아가 는 사람 들 간 의 내밀 하 이야기 절반 정도 읽 었 는데 감동 에 눈물 이 자꾸 나 이 니 다 재밌 어요 마음 이 따뜻 하 어 지
 나 는 이야기 몇 페이지 읽 다 보 니 어느새 끝 까지 읽 었 다 감동 도 있 고 재미 도 있 구 다 그렇 게 문제 의 답 을 구하 듯 살
사람 들 끼리 서로 를 위 로 하 고 서로 를 고치 는 것 이 정말 감동 적 이 이 었 다 중독 성 있 는 따뜻 하 이야기 한번 시작 하 면
연 도 너무 나 있 을 법 하 동화 같 은 이야기 이 네요 잔잔 하 감동 을 주 는 모두 소중하 사람 들 을 잃 지 말 ᆯ 시 기 재밌 어요
 하 네요 불편 하 편의점 정말 재밌 게 잘 읽 었 습니다 마음 의 감동 을 주 는 책 꼭 읽 어 보 세 요 자주 가 는 실제 동네 를 배경
웃 들 의 이야기 이 라서 좋 어요 세상 은 아직 사 만 하 고 ᆺ 감동 적 이 소설 이 니 다 따뜻 하 이야기 출근길 일 만 에 다 읽 었
요 삶 에 위로 가 되 는 책 이 네요 가슴 이 뭉클 하 어 지 는 감동 이 있 어요 너무 재밌 어서 이 라면 먹 듯 순식간 에 후루룩 읽 
 너무 재밌 어요 다양 하 사람 들 의 삶 의 이야기 를 재미있 고 감동 적 으로 녹이 어 놓 어서 즐겁 게 읽 었 어요 막히 없이 읽히 는
은 변하 다 인생 학교 는 그래서 시련 이 이 라는 교사 를 두 다 감동 적 이 고 왜 많이 읽히 는지 알 겠 음 나 가 불편 하 어야 나 
 시기 를 잘 표현 하 작품 이 거 같 고 이야기 들 을 통하 어서 감동 을 전달 하 어 주 다 나 의 눈물 버저 가 되 었 네요 권 도 읽
나 어 서로 의 손 님 제일 기억 에 남 는 문장 이 니 다 편 하 감동 하지만 불편 하 마음 누구 이 가 를 나 가 정하 어 놓 은 시선 
습 에 반성 을 줌 눈물 이 멈추 지 않 는 책 이 었 네요 가슴속 감동 이 아직 도 남 어 있 네요 잘 읽 었 습니다 나 의 인생 책 얼마
 단숨에 권 까지 왜 이 책 이 베스트셀러 이 지 나름 의 잣대 로 감동 의 소용돌이 를 겪 고 있 네요 소설책 은 지루 하 어서 절대 안 
이 누구 이 가 에게 크 위로 가 되 수 도 다시 읽 어도 따뜻 하 감동 이 마음 뭉클 하 게 전하 어 지 는 이야기 가볍 게 읽히 고 다양
이 훈훈 하 이야기 이 었 네요 잘 읽 고 가 니 다 술술 읽히 고 감동 재미 가 모두 들 어 있 는 책 잘 읽히 고 재미 와 감동 도 있 
읽히 고 감동 재미 가 모두 들 어 있 는 책 잘 읽히 고 재미 와 감동 도 있 네요 재밌 다 잔잔하 옆 동네 이야기 처럼 감동 웃음 생각 
고 재미 와 감동 도 있 네요 재밌 다 잔잔하 옆 동네 이야기 처럼 감동 웃음 생각 이 많 은 기분 좋 은 글 읽 게 되 어 영광 이 니 다
 계속 들르 고 싶 은 곳 이 었 어요 바로 완 독 하 게 만드 는 감동 적 이 책 이 다 여운 이 많이 남 고 생각 도 많이 하 게 되 는
 삶 을 엿보 수 있 었 던 다양 하 사람 들 이 살아가 는 이야기 감동 적 이 었 습니다 따뜻 하 이야기 사람 을 어떻 게 대하 어야 하 
그 자체 인류애 를 채우 수 있 는 책 재미있 게 잘 읽 었 습니다 감동 과 재미 가 다 들 어 있 는 책 앞뒤 가 딱 맞 는 구성 과 따뜻
 들 어 있 는 책 앞뒤 가 딱 맞 는 구성 과 따뜻 하 이야기 에 감동 이 절로 나오 니 다 가족 의 소중 하 문 을 열 기 위하 어서 는
는 모습 이 고스란히 담기 따뜻하 글 이 네요 재밌 습니다 잔잔 하 감동 을 느끼 고 눈물 흘리 며 마음 이 따뜻 하 어 지 을 느끼 게 하
을 살리 는 거 사람 마음 에 뭐 이 가 찡 하 게 남기 어 주 는 감동 최고 마음 이 따뜻 하 어 지 고 여운 이 나 ᆷ 네 요 옥수수 수

10.문서 내에서 단어가 사용된 위치 확인하기¶

In [ ]:
text.dispersion_plot(("마음", "따뜻", "재밌","불편"))
#어디서 등장하는지 볼수있음 그러나 신뢰하지 못함 

11.주어진 단어와 유사한 단어 확인¶

In [ ]:
text.similar("재미")
이야기 위로 마음 내용 가 듯 생각 차이 묘사 기대 관계 행복 영화 거리 주의 상처 악의 속도 변화 호의
In [ ]:
text.similar("따뜻")
불편 잔잔 다양 편안 생각 감사 이해 필요 궁금 추천 소통 소중 소소 편 다정 뭉클 행복 특별 평범 따듯
In [ ]: